<?php

namespace com\aristo\ingenieros\model;

include 'com/aristo/ingenieros/view/ConceptView.php';
include 'com/aristo/ingenieros/view/ConceptEntityView.php';

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

use com\aristo\ingenieros\view\ConceptView;
use com\aristo\ingenieros\view\ConceptEntityView;
use com\aristo\ingenieros\view\EntityView;
use \Exception;
use \mysqli;

/**
 * Description of ConceptQuery
 *
 * @author ARISTO INGENIEROS
 */
class ConceptQuery {

    public static function getConceptos($termino, $tipo, mysqli $con) {
        try {
            $termino = utf8_encode($termino);
            $tipo = utf8_encode($tipo);

            $sql = "SELECT
                        c.idconcepto AS ID,
                        td.descripcion AS TIPO,
                        c.descripcion AS CONCEPTO,
                        c.valorunitario AS MONTO
                    FROM
                        concepto AS c
                        INNER JOIN tipodocumento AS td ON td.idtipodocumento = c.tipodocumento_id
                    WHERE
                    c.eliminado = 'NO' AND c.descripcion LIKE '%" . $termino . "%'";

            if ($tipo != "") {
                $sql .= " AND td.descripcion = '".$tipo."'";
            }
            //$con->autocommit(FALSE);

            $query = $con->query($sql);

            if ($query) {
                if ($query->num_rows > 0) {
                    $conceptos = array();
                    while ($row = $query->fetch_row()) {
                        $id = utf8_decode($row[0]);
                        $tipo = utf8_decode($row[1]);
                        $concepto = utf8_decode($row[2]);
                        $monto = utf8_decode($row[3]);

                        $concept = new ConceptView();
                        $concept->setId($id);
                        $concept->setTipo($tipo);
                        $concept->setConcepto($concepto);
                        $concept->setMonto($monto);

                        $conceptos [] = $concept->toJSON();
                    }
                    return $conceptos;
                } else {
                    return "NO EXISTE CONCEPTOS CONFIGURADOS";
                }
            } else {
                return "ERROR DE RED.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE CONCEPTOS: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

    public static function getConcepto($id, mysqli $con) {
        try {
            $id = utf8_encode($id);

            $sql = "SELECT
                        c.idconcepto,
                        td.descripcion AS TIPO,
                        c.descripcion,
                        c.valorunitario,
                        dc.cuenta_iddebe,
                        (SELECT CONCAT(codigo, ' ', descripcion) FROM cuenta WHERE idcuenta = dc.cuenta_iddebe),
                        dc.cuenta_idhaber,
                        (SELECT CONCAT(codigo, ' ', descripcion) FROM cuenta WHERE idcuenta = dc.cuenta_idhaber),
                        f.descripcion AS FASE
                    FROM
                        concepto AS c
                        INNER JOIN tipodocumento AS td ON c.tipodocumento_id = td.idtipodocumento
                        INNER JOIN detalle_cuentas AS dc ON c.idconcepto = dc.concepto_id
                        INNER JOIN fase AS f ON dc.fase_id = f.idfase
                    WHERE
                        c.idconcepto = " . $id;

            //$con->autocommit(FALSE);

            $query = $con->query($sql);

            if ($query) {
                if ($query->num_rows > 0) {
                    $conceptoe = new ConceptEntityView();
                    while ($row = $query->fetch_row()) {
                        $id = utf8_decode($row[0]);
                        $tipo = utf8_decode($row[1]);
                        $concepto = utf8_decode($row[2]);
                        $monto = utf8_decode($row[3]);
                        $fase = utf8_decode($row[8]);

                        if ($fase == "PRESUPUESTAL") {
                            $idDebePRE = utf8_decode($row[4]);
                            $desDebePRE = utf8_decode($row[5]);
                            $idHaberPRE = utf8_decode($row[6]);
                            $deshaberPRE = utf8_decode($row[7]);

                            $conceptoe->setIdPresupuestal($idDebePRE);
                            $conceptoe->setDesPresupuestal($desDebePRE);
                        } else if ($fase == "CONTABLE") {
                            $idDebeREC = utf8_decode($row[4]);
                            $desDebeREC = utf8_decode($row[5]);
                            $idHaberREC = utf8_decode($row[6]);
                            $deshaberREC = utf8_decode($row[7]);

                            $conceptoe->setIdContabledb($idDebeREC);
                            $conceptoe->setDesContabledb($desDebeREC);
                            $conceptoe->setIdContablehb($idHaberREC);
                            $conceptoe->setDesContablehb($deshaberREC);
                        }

                        $conceptoe->setId($id);
                        $conceptoe->setTipo($tipo);
                        $conceptoe->setConcepto($concepto);
                        $conceptoe->setMonto($monto);
                    }
                    return $conceptoe->toJSON();
                } else {
                    return "CONCEPTO YA NO EXISTE";
                }
            } else {
                return "ERROR DE RED.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE CONCEPTO: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

    public static function updateConcepto($id, $concepto, $monto, $tipo, $presupuestal, $contabledb, $contablehb, mysqli $con) {
        try {
            $concepto = utf8_encode(strtoupper(trim($concepto)));
            $monto = utf8_encode($monto);
            $tipo = utf8_encode($tipo);
            $presupuestal = ($presupuestal !== "0") ? utf8_encode($presupuestal) : "null";
            $contabledb = ($contabledb !== "0") ? utf8_encode($contabledb) : "null";
            $contablehb = ($contablehb !== "0") ? utf8_encode($contablehb) : "null";
            /* $giradodb = ($giradodb !== "0") ? utf8_encode($giradodb) : "null";
              $giradohb = ($giradohb !== "0") ? utf8_encode($giradohb) : "null";
              $compromisodb = ($compromisodb !== "0") ? utf8_encode($compromisodb) : "null";
              $compromisohb = ($compromisohb !== "0") ? utf8_encode($compromisohb) : "null";
              $pagadodb = ($pagadodb !== "0") ? utf8_encode($pagadodb) : "null";
              $pagadohb = ($pagadohb !== "0") ? utf8_encode($pagadohb) : "null";
              $determinadodb = ($determinadodb !== "0") ? utf8_encode($determinadodb) : "null";
              $determinadohb = ($determinadohb !== "0") ? utf8_encode($determinadohb) : "null";
              $recaudadodb = ($recaudadodb !== "0") ? utf8_encode($recaudadodb) : "null";
              $recaudadohb = ($recaudadohb !== "0") ? utf8_encode($recaudadohb) : "null"; */

            $con->autocommit(FALSE);

            $sqlgetTipo = "SELECT td.idtipodocumento FROM tipodocumento AS td WHERE td.descripcion = '" . $tipo . "'";

            $queryGetTipo = $con->query($sqlgetTipo);

            if ($queryGetTipo) {
                $idTipo = "0";
                while ($row = $queryGetTipo->fetch_row()) {
                    $idTipo = utf8_decode($row[0]);
                }

                if ($idTipo != 0) {
                    $sqlUpdateConcepto = "UPDATE concepto SET tipodocumento_id = " . $idTipo . ", descripcion = '" . $concepto . "', valorunitario = " . $monto . " WHERE idconcepto =" . $id;

                    $queryUpdateConcepto = $con->query($sqlUpdateConcepto);

                    if ($queryUpdateConcepto) {
                        $sqlGetfases = "SELECT f.idfase, f.descripcion FROM fase AS f";
                        $queryGetFases = $con->query($sqlGetfases);

                        $actualizado = TRUE;
                        while ($row = $queryGetFases->fetch_row()) {
                            $idFase = utf8_decode($row[0]);
                            $idFDescripcion = utf8_decode($row[1]);

                            $tipo = FALSE;
                            $sqlContable = "UPDATE detalle_cuentas SET ";
                            switch ($idFDescripcion) {
                                case "CONTABLE": $sqlContable .= " cuenta_iddebe =" . $contabledb . ", cuenta_idhaber=" . $contablehb;
                                    $tipo = TRUE;
                                    break;
                                case "PRESUPUESTAL": $sqlContable .= " cuenta_iddebe =" . $presupuestal;
                                    $tipo = TRUE;
                                    break;
                            }
                            $sqlContable .= " WHERE concepto_id = " . $id . " AND fase_id = " . $idFase;

                            if ($tipo) {
                                $actualizadoDetalle = $con->query($sqlContable);
                                if (!$actualizadoDetalle) {
                                    $actualizado = FALSE;
                                    return "ERROR DE RED.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
                                }
                            }
                        }

                        if ($actualizado) {
                            $rpta = new EntityView();
                            $rpta->setResponse("SUCCESS");
                            $rpta->setDescripcion("ACTUALIZADO CORRECTAMENTE");
                            return $rpta->toJSON();
                        } else {
                            return "ERROR AL ACTUALIZAR DETALLE DEL CONCEPTO.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
                        }
                    } else {
                        return "ERROR DE RED.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
                    }
                } else {
                    return "ERROR DE BASE DE DATOS: TIPO DOCUMENTO";
                }
            } else {
                return "ERROR DE RED.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }

            /* $query = $con->query($sql);

              if ($query) {
              $rpta = new EntityView();
              $rpta->setResponse("SUCCESS");
              $rpta->setDescripcion("ACTUALIZADO CORRECTAMENTE");
              return $rpta->toJSON();
              } else {
              return "ERROR DE RED: " . nl2br($con->errno . "\n" . $con->error);
              } */
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE CONCEPTO: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

    public static function addConcepto($concepto, $monto, $tipo, $presupuestal, $contabledb, $contablehb, mysqli $con) {
        try {
            $concepto = utf8_encode($concepto);
            $monto = utf8_encode($monto);
            $tipo = utf8_encode($tipo);

            $presupuestal = ($presupuestal !== "0") ? utf8_encode($presupuestal) : "null";
            $contabledb = ($contabledb !== "0") ? utf8_encode($contabledb) : "null";
            $contablehb = ($contablehb !== "0") ? utf8_encode($contablehb) : "null";

            $sqlBuscaConcepto = "SELECT Count(*) FROM concepto AS c WHERE c.descripcion = '" . $concepto . "' AND c.eliminado = 'NO'";

            $con->autocommit(FALSE);

            $search = $con->query($sqlBuscaConcepto);

            if ($search) {
                $repetido = "0";
                while ($row = $search->fetch_row()) {
                    $repetido = utf8_decode($row[0]);
                }

                if ($repetido == 0) {
                    $sqlgetTipo = "SELECT td.idtipodocumento FROM tipodocumento AS td WHERE td.descripcion = '" . $tipo . "'";

                    $queryGetTipo = $con->query($sqlgetTipo);

                    if ($queryGetTipo) {
                        $idTipo = "0";
                        while ($row = $queryGetTipo->fetch_row()) {
                            $idTipo = utf8_decode($row[0]);
                        }

                        if ($idTipo != 0) {
                            $sqlInsertConcepto = "INSERT INTO concepto (idconcepto, tipodocumento_id, descripcion, valorunitario) VALUES (NULL, " . $idTipo . ", '" . $concepto . "', '" . $monto . "')";

                            $queryInsertConcepto = $con->query($sqlInsertConcepto);
                            if ($queryInsertConcepto) {
                                $idConcepto = $con->insert_id;

                                $sqlGetfases = "SELECT f.idfase, f.descripcion FROM fase AS f";
                                $queryGetFases = $con->query($sqlGetfases);

                                $insertado = TRUE;
                                while ($row = $queryGetFases->fetch_row()) {
                                    $idFase = utf8_decode($row[0]);
                                    $idFDescripcion = utf8_decode($row[1]);

                                    $bandera = FALSE;
                                    switch ($idFDescripcion) {
                                        case "CONTABLE": $sqlContable = "INSERT INTO detalle_cuentas (iddetalle_cuentas, concepto_id, cuenta_iddebe, 
                                        cuenta_idhaber, fase_id) VALUES (NULL, " . $idConcepto . ", ".$contabledb . ", " . $contablehb . ", " . $idFase . ")";
                                            $bandera = TRUE;
                                            break;
                                        case "PRESUPUESTAL": $sqlContable = "INSERT INTO detalle_cuentas (iddetalle_cuentas, concepto_id, cuenta_iddebe, fase_id) VALUES (NULL, " . $idConcepto . ", ".$presupuestal . ", " . $idFase . ")";
                                            $bandera = TRUE;
                                            break;
                                    }
                                    if ($bandera) {
                                        $inserDetalle = $con->query($sqlContable);
                                        if (!$inserDetalle) {
                                            $insertado = FALSE;
                                        }
                                    }
                                }

                                if ($insertado) {
                                    $rpta = new EntityView();
                                    $rpta->setResponse("SUCCESS");
                                    $rpta->setDescripcion("AGREGADO CORRECTAMENTE");
                                    return $rpta->toJSON();
                                } else {
                                    return "ERROR AL INSERTAR DETALLE DE LAS CUENTAS.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
                                }
                            } else {
                                return "ERROR DE RED.<br/><br/>" . $con->errno . "<br/>" . nl2br($con->error);
                            }
                        } else {
                            return "ERROR DE BASE DE DATOS: TIPO DOCUMENTO";
                        }
                    } else {
                        return "ERROR DE RED.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
                    }
                } else {
                    return "ERROR CONCEPTO REPETIDO";
                }
            } else {
                return "ERROR DE RED.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE CONCEPTO: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

    public static function deleteConcepto($id, mysqli $con) {
        try {
            $id = utf8_encode($id);

            $sqlconcepto = "UPDATE concepto SET eliminado = 'SI' WHERE idconcepto = " . $id;
            $delete = $con->query($sqlconcepto);
            //echo var_dump($deletePersona).$sql_detpersona;
            if ($delete) {
                $rpta = new EntityView();
                $rpta->setResponse("SUCCESS");
                $rpta->setDescripcion("ELIMINADO CORRECTAMENTE");
                return $rpta->toJSON();
            } else {
                return "ERROR DE RED.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE CONCEPTOS: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

}